package com.kotodama.domain.repositories;

import com.kotodama.domain.entities.Tenant;
import com.kotodama.domain.enums.TenantStatus;
import com.kotodama.domain.valueobjects.TenantName;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;

import java.util.List;
import java.util.Optional;

/**
 * 租户仓储接口
 * 提供租户数据访问方法
 */
public interface TenantRepository extends JpaRepository<Tenant, String> {

    /**
     * 根据租户名称查找租户
     * 
     * @param name 租户名称
     * @return 租户（如果存在）
     */
    @Query("SELECT t FROM Tenant t WHERE t.name.value = :name")
    Optional<Tenant> findByName(@Param("name") String name);

    /**
     * 检查租户名称是否存在
     * 
     * @param name 租户名称
     * @return 是否存在
     */
    @Query("SELECT COUNT(t) > 0 FROM Tenant t WHERE t.name.value = :name")
    boolean existsByName(@Param("name") String name);

    /**
     * 根据状态查找租户列表
     * 
     * @param status 租户状态
     * @return 租户列表
     */
    List<Tenant> findByStatus(TenantStatus status);

    /**
     * 查找活跃状态的租户
     * 
     * @return 活跃租户列表
     */
    @Query("SELECT t FROM Tenant t WHERE t.status = 'ACTIVE'")
    List<Tenant> findActiveTenants();
}
